home *** CD-ROM | disk | FTP | other *** search
/ Chip: 2005 Utilities / CHIP Utilities 2005.7z / CHIP Utilities 2005.iso / images / freesco.igz / freesco.img / router / wwa / cgi / adm.cgi < prev    next >
Encoding:
Text File  |  2003-06-20  |  9.5 KB  |  309 lines

  1. #!/bin/sh
  2.  
  3. . /etc/system.cfg
  4. . /etc/live.cfg
  5. . /etc/chat.pwd
  6.  
  7. PATH=/boot/bin:/bin:/sbin:/usr/bin:/usr/sbin:/etc:/tmp:/rc:/mnt/bootdev/router/pkg/rc:/mnt/bootdev/router/rc:.
  8.  
  9. Q="$QUERY_STRING"
  10. E="echo"
  11.  
  12. $E "Content-type: text/html"
  13. $E "Expires: Thu, 1 Oct 1990 19:32:44 GMT"
  14. $E
  15.  
  16. [ "$REMOTE_USER" = admin ] || exit
  17.  
  18. tbl()    {
  19.     $E "<tr>"
  20.     for i in "$1" "$2" "$3" "$4"; do $E "<td><font face=courier>$i</td>";done
  21.     $E "</tr>"
  22. }
  23. form()    {
  24.     usr.cgi cpage "$3<form method=POST action=adm.cgi?$2 target=main><font face=system color=#00FFFF>$1 <input type=text name=line size=25 style='font-family: Courier'> <input type=submit value=Submit> <input type=reset value=Clear></form>"
  25. }
  26. message()    {
  27. C="$1 is not running or is disabled"
  28.  
  29. }
  30. outpt()    {
  31. cpage "<pre>${C}</pre>"
  32. get()    {
  33.     read C;C=`$E $C| sed 's/line=//;s///'`
  34. }
  35. aban()    {
  36.     get
  37.     C=`$E $C | sed 's.%2F.\/.;s/%2C/,/'`
  38.     if [ "$1" = un ]; then
  39.         cat /etc/banlist.cfg | sed -n /$C/!P >/etc/banlist.new
  40.         if [ -s /etc/banlist.new ]; then 
  41.             mv /etc/banlist.new /etc/banlist.cfg
  42.         else
  43.             cpage "Bad argument"; exit
  44.         fi
  45.     else
  46.         $E "$C" >> //etc/banlist.cfg
  47.     fi
  48.     cpage "`/rc/rc_masq restart`<br>Address $C has been $1banned"
  49.     cp /etc/banlist.cfg /mnt/bootdev/router/etc/
  50. }
  51. S() {
  52.     C="`$E "$C" | sed "s.%$1.$2.g;s.%$3.$4.g;s.%$5.$6.g;s.%$7.$8.g"`"
  53. }
  54. cpage() {
  55.     usr.cgi cpage "$*"
  56. }
  57. ttl()    {
  58.     usr.cgi ttl
  59. }
  60. end()    {
  61.     usr.cgi end
  62. }
  63.  
  64. case "$Q" in
  65.  
  66.     dyndns)    fork dyndns 
  67.     cpage "Request has been made";;
  68.     dynforce)    fork dyndns -f 
  69.     cpage "Request has been made";;
  70.  
  71.     listu)    ttl
  72.         $E "</pre><center><br><table border=1 cellspacing=0 cellpadding=3>"
  73.         tbl User Password "Time/Action" Shell
  74.         for i in `cat /etc/passwd | sed s/\ /~/g`; do
  75.             set -- `$E $i| sed 's/:/\ /g;s/*/@/'`
  76.             P=xxxxxx; [ "$2" = @ ] && P=disabled
  77.             tbl $1 $P $5 $7
  78.         done
  79.         $E "</table>"
  80.         end;;
  81.  
  82.     del)    get
  83.         if [ "$C" = root ]; then
  84.             cpage "Protected user '$C'"
  85.             exit
  86.         fi
  87.         cat /etc/passwd | sed /^$C/d >/etc/NEW
  88.         mv /etc/NEW /etc/passwd
  89.         cp /etc/passwd /mnt/bootdev/router/etc
  90.         sync;sync
  91.         cpage "User '$C' has been deleted";;
  92.  
  93.     wlst)    ttl
  94.         $E "</pre><center><br><table border=1 cellspacing=0 cellpadding=3>"
  95.         for i in `cat /wwa/cgi/.htpasswd`; do
  96.             set -- `$E $i| sed 's/:/\ /'`
  97.             $E "<tr><td>$1</td></tr>"
  98.         done
  99.         $E "</table>"
  100.         end;;
  101.  
  102.     tpass)    cpage "</center><blockquote><blockquote><form method=POST action=adm.cgi?npass target=main>Add or change modem access password for <font face=system color=#00FFFFF>USER <input type=text name=user size=8 style='font-family: Courier'><br>PASSWORD <input type=password name=pass1 size=20 style='font-family: Courier'><br>PASSWORD <input type=password name=pass2 size=20 style='font-family: Courier'><br>Allowed TIME <input type=text name=time size=9 style='font-family: Courier' value='0000-2400'>   <input type=submit value=Submit> <input type=reset value=Clear></form></blockquote></blockquote>";;
  103.     
  104.     npass)    read A
  105.         eval `$E "$A" | sed 's/&/;/g;s///'`
  106.         if [ "$user" -a "$user" != root ]; then
  107.             if [ "$pass1" = "$pass2" ]; then
  108.                 if [ "`cat /etc/passwd | sed -n /^$user:/P`" ]; then
  109.                     cat >/tmp/tmp <<-!
  110.                     $pass1
  111.                     $pass2
  112.                     !
  113.                     cpage "</center><blockquote><blockquote><pre>`cat /tmp/tmp | passwd $user 2>/dev/null`</blockquote></blockquote></pre>"
  114.                 else
  115.                     cat >/tmp/tmp <<-!
  116.                     $user
  117.                     $time
  118.                     $pass1
  119.                     $pass2
  120.                     !
  121.                     cpage "</center><blockquote><blockquote><pre>`cat /tmp/tmp | adduser 2>/dev/null`</blockquote></blockquote></pre>"
  122.                 fi
  123.                 rm /tmp/tmp
  124.                 sync;sync
  125.                 exit
  126.             else
  127.                 A="Passwords don't match"
  128.             fi
  129.         else
  130.             A="Please enter correct user name"
  131.         fi
  132.         cpage "$A"
  133.         ;;
  134.  
  135.     fpass)    cpage "</center><blockquote><blockquote><form method=POST action=adm.cgi?cpass target=main>Add or change web access password for <font face=system color=#00FFFFF>USER <input type=text name=user size=8 style='font-family: Courier'><br>PASSWORD <input type=password name=pass1 size=20 style='font-family: Courier'><br>PASSWORD <input type=password name=pass2 size=20 style='font-family: Courier'> <input type=submit value=Submit> <input type=reset value=Clear></form></blockquote></blockquote>";;
  136.  
  137.     cpass)    read A
  138.         eval `$E "$A" | sed 's/&/;/g;s///'`
  139.         if [ "$user" ]; then
  140.             if [ "$pass1" = "$pass2" ]; then
  141.                 A=`$E "$pass1" | htpasswd /wwa/cgi/.htpasswd "$user"`
  142.             else
  143.                 A="You misspelled it. Password not changed."
  144.             fi
  145.         else
  146.             A="Please enter correct user name"
  147.         fi
  148.         cpage "$A"
  149.         sync;sync;;
  150.  
  151.     wdel)    get
  152.         if [ "$C" = admin ]; then
  153.             cpage "Protected user '$C'"
  154.             exit
  155.         fi
  156.         cat /wwa/cgi/.htpasswd | sed /^$C:/d >/wwa/cgi/NEW
  157.         mv /wwa/cgi/NEW /wwa/cgi/.htpasswd
  158.         sync;sync
  159.         cpage "User '$C' has been deleted";;
  160.  
  161.     dns*)    C=`$E $Q| sed s/dns//`
  162.         C=`/rc/rc_dns $C 2>&1`
  163.         [ "$C" ] || message DNS 
  164.         outpt;;
  165.  
  166.     dhcp*)    C=`$E $Q| sed s/dhcp//`
  167.         C=`/rc/rc_dhcpd $C 2>&1`
  168.         [ "$C" ] ||  message DHCP
  169.         outpt;;
  170.  
  171.     httpkill)
  172.         C=`/rc/rc_httpd stop 2>&1`
  173.         outpt;;
  174.     httpstop)
  175.         N="<a target=main href=adm.cgi?httpkill>Stop HTTP servers</a>"
  176.         cpage "</center><blockquote>Clicking the link below will completely dissable the web server and control panel. This is the only warning.<br>$N"
  177.         ;;
  178.     lpd*)    C=`$E $Q| sed s/lpd//`
  179.         C=`/rc/rc_lpd $C 2>&1`
  180.         [ "$C" ] || message LPD
  181.         outpt;;
  182.  
  183.     pureftp*) C=`$E $Q| sed s/pureftp//`
  184.         C=`/rc/rc_ftpd $C` # 2>&1`
  185.         [ "$C" ] || message FTP
  186.         outpt;;
  187.         
  188.     cron*)    C=`$E $Q| sed s/cron//`
  189.         C=`/rc/rc_crond $C 2>&1`
  190.         [ "$C" ] || message Cron
  191.         outpt;;
  192.         
  193.     ident*)    C=`$E $Q| sed s/ident//`
  194.         C=`/rc/rc_ident $C 2>&1`
  195.         [ "$C" ] || message Ident
  196.         outpt;;
  197.  
  198.     tlnet*)    C=`$E $Q| sed s/tlnet//`
  199.         C=`/rc/rc_tlnet $C 2>&1`
  200.         [ "$C" ] || message Telnet
  201.         outpt;;
  202.  
  203.     mdm*)    C=`$E $Q| sed s/mdm//`
  204.         C=`/rc/rc_ras $C 2>&1`
  205.         [ "$C" ] || message Dialin
  206.         outpt;;
  207.  
  208.     ring*)    set -- `$E $RINGS | sed s/,/\ /`
  209.         if [ `$E $Q | grep std` ]; then
  210.             rm -f /etc/morerings
  211.             R="Number of rings before answer has been<br>reset to standard value RINGS=$RINGS"
  212.         else
  213.             : > /etc/morerings
  214.             R="Number of rings before answer has been changed to $2"
  215.         fi
  216.         cpage "Dial-in service.<br><br>$R<br>Changes will take effect within 10 minutes."
  217.         ;;
  218.  
  219.     fwall)    C=`/rc/rc_masq restart 2>&1`
  220.         cpage "<pre>${C}</pre>";;
  221.  
  222.     sync)    if [ "$TIMADDR" ]; then
  223.             synctime 
  224.             cpage `cat /tmp/synctime.log`
  225.         else
  226.             cpage "No server has been defined"
  227.         fi        
  228.         ;;
  229.  
  230.     ban)    aban;;
  231.  
  232.     uban)    aban un;;
  233.     
  234.     blst)    cpage "</center></blockquote><blockquote><pre>-- cat /etc/banlist.cfg --<BR>`cat /etc/banlist.cfg | sed -e 's/\#.*//' -e '/^$/d'`</pre>";;
  235.  
  236.     fadd)    cpage "</center><blockquote><blockquote>Add forwarding of incoming packets <font face=system color=#00FFFFF><p><form method=POST action=adm.cgi?padd target=main>TYPE <input type=text name=type size=3 style='font-family: Courier'> [ tcp, udp ]<BR> PORT or lower range of PORTS<input type=text name=inp size=5 style='font-family: Courier'><BR>to ADDR <input type=text name=outa size=25 style='font-family: Courier'><BR>to PORT or upper Range of -PORTS<input type=text name=outp size=6 style='font-family: Courier'><BR> <input type=submit value=Submit> <input type=reset value=Clear></form>NOTE: To Forward a port range rather than a single port use a - in front of the (to) PORT like. From port 2300 to port -2400</blockquote></blockquote>";;
  237.  
  238.     fdel)    cpage "</center><blockquote><blockquote>Delete forwarding of incoming packets<font face=system color=#00FFFFF><p><form method=POST action=adm.cgi?pdel target=main>To ADDR <input type=text name=iaddr size=25 style='font-family: Courier'>  <input type=submit value=Submit> <input type=reset value=Clear></form></blockquote></blockquote>";;
  239.  
  240.     plist)    cpage "</center><blockquote><pre>-- cat /etc/portfw.cfg --<BR>`cat /etc/portfw.cfg | sed -e 's/\#.*//' -e '/^$/d'`</pre></blockquote>";;
  241.  
  242.     padd)    read A
  243.         eval `$E "$A" | sed 's/&/;/g;s///'`
  244.         $E "$type,$inp,$outp,$outa" >> /etc/portfw.cfg
  245.         cp /etc/portfw.cfg /mnt/bootdev/router/etc/
  246.         cpage "<pre>`/rc/rc_pfwd restart`</pre>"
  247.         ;;
  248.  
  249.     pdel)    read A
  250.         eval `$E "$A" | sed 's/&/;/g;s///'`
  251.         cat /etc/portfw.cfg | sed -n /$iaddr/!P >/etc/portfw.new
  252.         if [ -s /etc/portfw.new ]; then 
  253.             mv /etc/portfw.new /etc/portfw.cfg
  254.         else
  255.             cpage "Bad argument"; exit
  256.         fi
  257.         cp /etc/portfw.cfg /mnt/bootdev/router/etc/
  258.         cpage "<pre>`rc_pfwd restart`</pre>"
  259.         ;;
  260.  
  261.     poff)    ipportfw -C; ipautofw -F
  262.         cpage "Port forwarding table has been cleared.";;
  263.     prst)    cpage "<pre>`rc_pfwd restart`</pre>";;
  264.  
  265.     form*)    C=`$E $Q| sed s/form//`
  266.         case "$C" in
  267.             del) form "Delete console user" $C;;
  268.             wdel) form "Delete web user" $C;;
  269.             ban) form "Ban IP ADDR" "$C" "</center><blockquote><blockquote>Format: l,1.2.3.4/32<br>where l or e stands for local or external<br>1.2.3.4 - IP addr of banned host or network<br>/32 - netbits or netmask if banning network<br>Example: l,10.10.10.3<br>Example: e,123.123.123.123/24<br><br>";;
  270.             uban) form "Unban IP ADDR" $C;;
  271.         esac;;
  272.  
  273.     ethernet|isp.*)
  274.         ttl
  275.         $E "</pre><p align=right>FREESCO v$VERSION [$ROUTER] `date`<br><br><br><center>" 
  276.         $E "Router will switch to '$Q' mode in a few seconds<br><br>"   
  277.         end
  278.         $E "<br><pre>"
  279.         export LOGNAME=admin@$REMOTE_ADDR
  280.         MODE=`$E $Q | sed s/isp.//`
  281.         if [ "$MODE" = ethernet ]; then
  282.             mode $MODE &
  283.         else
  284.             mode dialup $MODE &
  285.         fi        
  286.  
  287.         ;;
  288.  
  289.     reboot) cpage "Rebooting router"
  290.         reboot;;
  291.  
  292.     shell)    ttl; get
  293.         if [ ! "$C" ]; then end; exit; fi
  294.         C="`$E "$C" | sed s/+/\ /g`"
  295.         S 3A ":" 3B ";" 3C "<" 3D "="
  296.         S 3E ">" 3F "?" 21 "!" 23 "#"
  297.         S 24 "$" 25 "%" 26 "\&" 27 "'"
  298.         S 28 "(" 29 ")" 2B "+" 2C ","
  299.         S 2F "/" 5B "[" 5D "]" 5E "^"
  300.         S 7B "{" 7C "|" 7D "}" 7E "~"
  301.         C=`$E "$C"| sed 's.%5C.\\.g;s.%22.".g;s.%60.`.g'`
  302.         logger -p auth.info -t "" "[admin@$REMOTE_ADDR] issued: $C"
  303.         $E
  304.         eval $C | sed "s/</\<\;/g;s/>/\>\;/g"
  305.         $E
  306.         end;;
  307. esac
  308.